package edu.xmut.kakamusic.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.android.material.snackbar.Snackbar;

import edu.xmut.kakamusic.R;

public class SnackBarUtil {
    /**
     * Snackbar 展示工具
     *
     * @param activity            上下文
     * @param view                配合SnackBar使用的CoordinatorLayout
     * @param msg                 展示文案
     * @param isDismiss           是否自动关闭
     * @param closeIcon           关闭按钮
     * @param iSnackBarClickEvent 点击事件
     * @return Snackbar实例
     */
    @SuppressLint("RestrictedApi")
    public static Snackbar showSnackBar(Activity activity, View view, String msg, boolean isDismiss, int closeIcon, ISnackBarClickEvent iSnackBarClickEvent) {
        int duringTime;
        // 设置显示状态
        if (isDismiss) {
            // 会自动消失
            duringTime = Snackbar.LENGTH_LONG;
        } else {
            // 需要手动点击消失
            duringTime = Snackbar.LENGTH_INDEFINITE;
        }
        Snackbar snackbar = null;
        // 获取SnackBar实例
        snackbar = Snackbar.make(view, "", duringTime);
        // 设置显示时间，如果设置了这个则在Snackbar.make中设置的time则无效
        // snackbar.setDuration(3000);
        // 设置snackbar的深度，避免被其他控件遮挡
        snackbar.getView().setElevation(0);
        // 设置背景透明，避免自带黑色背景影响
        snackbar.getView().setBackgroundColor(Color.TRANSPARENT);
        // 设置padding 取消自定义时黑色边框
        snackbar.getView().setPadding(0, 0, 0, 0);
        @SuppressLint("RestrictedApi")
        Snackbar.SnackbarLayout sl = (Snackbar.SnackbarLayout) snackbar.getView();
        // 设置SnackBar的显示位置
        ViewGroup.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(layoutParams.width, layoutParams.height);
        flp.bottomMargin = 70;
        flp.gravity = Gravity.BOTTOM | Gravity.CENTER; // 设置显示位置
        sl.setLayoutParams(flp);
        // 获取自定义布局
        View inflate = LayoutInflater.from(activity).inflate(R.layout.layout_snackbar_view, null);
        // 获取布局内控件
        @SuppressLint({"MissingInflatedId", "LocalSuppress"})
        TextView textView = inflate.findViewById(R.id.tv_snackbar_text);
        // 设置文案
        textView.setText(msg);
        // 设置点击事件
        textView.setOnClickListener(v -> {
            if (iSnackBarClickEvent != null) {
                iSnackBarClickEvent.tvClickEvent();
            }
        });
        // 获取布局内控件
        ImageView imageView = inflate.findViewById(R.id.imageView2);
        // 获取图片资源
        if (closeIcon != 0) {
            Drawable drawable = activity.getResources().getDrawable(closeIcon);
            // 设置图片
            imageView.setImageDrawable(drawable);
            // 设置点击事件
            imageView.setOnClickListener(v -> {
                if (iSnackBarClickEvent != null) {
                    iSnackBarClickEvent.imgClickEvent();
                }
            });
        } else {
            imageView.setVisibility(View.GONE);
        }
        // 将自定义布局添加到SnackbarView中
        sl.addView(inflate);
        // 显示
        snackbar.show();
        return snackbar;
    }

    public interface ISnackBarClickEvent {
        void tvClickEvent();

        void imgClickEvent();
    }
}